﻿using System;
using System.Web;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BemEstarEmprego.Entities;

namespace BemEstarEmprego.Entities.Sessions
{
	/// <summary>
	/// Classe que representa a Sessão do Usuário Logado
	/// </summary>
	public class UsuarioSession
	{
		public UsuarioSession Session { get; set; }
		public usuario Usuario { get; set; }
		public string SessionName { get; set; }

		/// <summary>
		/// Recupera a sessão do Usuário logado
		/// ou cria um nova caso o mesmo não esteja
		/// </summary>
		/// <returns>UsuarioSession</returns>
		public UsuarioSession GerarInstancia()
		{
			Session = new UsuarioSession();
			if (HttpContext.Current.Session[Session.GetType().Name] == null)
			{
				Session = new UsuarioSession();
				HttpContext.Current.Session.Add(Session.GetType().Name, Session);
			}
			else
			{
				Session = (UsuarioSession)HttpContext.Current.Session[Session.GetType().Name];
				SessionName = Session.GetType().Name;
			}
			return Session;
		}

		/// <summary>
		/// Atualiza a sessão do Usuário logado
		/// </summary>
		public void RefreshSession()
		{
			using(BemEstarEmprego.Entities.bemestar_empregoEntities context = 
					new BemEstarEmprego.Entities.bemestar_empregoEntities())
			{
				var usuario = (from user in context.usuario
							  where user.ID == Usuario.ID
							 select user).FirstOrDefault<usuario>();
				
				if(usuario != null)
				{
					Session = new UsuarioSession{Usuario = usuario};
					SessionName=SessionName.GetType().Name;
				}
			}
			SaveInstance();
		}

		protected void SaveInstance()
		{
			HttpContext.Current.Session[SessionName] = this;
		}
	}
}
